﻿2026-05-16T02:34:30.4452641Z ##[group]Run pnpm --filter @rebno/client test:e2e
2026-05-16T02:34:30.4453615Z [36;1mpnpm --filter @rebno/client test:e2e[0m
2026-05-16T02:34:30.4537668Z shell: /usr/bin/bash -e {0}
2026-05-16T02:34:30.4538490Z env:
2026-05-16T02:34:30.4538920Z   PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
2026-05-16T02:34:30.4539590Z   STAGING_URL: https://staging.rebno.decidel.com
2026-05-16T02:34:30.4540581Z   STAGING_INVITE_TOKEN: ***
2026-05-16T02:34:30.4541029Z   UAT_ACCOUNT_A: ***
2026-05-16T02:34:30.4541497Z   UAT_PASSWORD_A: ***
2026-05-16T02:34:30.4541895Z   UAT_ACCOUNT_B: ***
2026-05-16T02:34:30.4542327Z   UAT_PASSWORD_B: ***
2026-05-16T02:34:30.4542680Z ##[endgroup]
2026-05-16T02:34:30.8046057Z 
2026-05-16T02:34:30.8047296Z > @rebno/client@0.1.0 test:e2e /home/runner/work/rebno/rebno/apps/client
2026-05-16T02:34:30.8048863Z > playwright test
2026-05-16T02:34:30.8049456Z 
2026-05-16T02:34:32.3969957Z 
2026-05-16T02:34:32.3970833Z Running 37 tests using 1 worker
2026-05-16T02:34:32.3971829Z 
2026-05-16T02:34:48.5797086Z   ✘   1 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (14.4s)
2026-05-16T02:35:02.1301748Z   ✘   2 [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) (retry #1) (11.6s)
2026-05-16T02:35:18.4890513Z   ✘   3 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (14.3s)
2026-05-16T02:35:34.8762771Z   ✘   4 [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) (retry #1) (14.4s)
2026-05-16T02:35:43.4410782Z   ✘   5 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (7.2s)
2026-05-16T02:35:51.8438854Z   ✘   6 [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) (retry #1) (7.1s)
2026-05-16T02:36:00.9326412Z   ✓   7 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block south wall (D-62 anti-revert) (8.3s)
2026-05-16T02:36:18.9598744Z   ✘   8 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) (17.7s)
2026-05-16T02:36:28.0884815Z   ✓   9 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) (retry #1) (8.3s)
2026-05-16T02:36:36.1139006Z   ✓  10 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block west wall (D-62 anti-revert) (8.0s)
2026-05-16T02:36:43.7850075Z   ✓  11 [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block east wall (D-62 anti-revert) (7.6s)
2026-05-16T02:37:07.2947140Z   ✘  12 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (22.7s)
2026-05-16T02:37:25.5067685Z   ✘  13 [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) (retry #1) (16.3s)
2026-05-16T02:37:54.2233576Z   ✘  14 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (27.2s)
2026-05-16T02:38:22.9092934Z   ✘  15 [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene (retry #1) (27.2s)
2026-05-16T02:38:31.7223794Z   ✓  16 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block south wall (8.0s)
2026-05-16T02:38:39.6075240Z   ✓  17 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block north wall (7.8s)
2026-05-16T02:38:47.7895560Z   ✓  18 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block west wall (8.1s)
2026-05-16T02:39:05.6762477Z   ✘  19 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (17.6s)
2026-05-16T02:39:14.7460040Z   ✓  20 [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall (retry #1) (8.2s)
2026-05-16T02:39:31.8137294Z   ✘  21 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (15.7s)
2026-05-16T02:39:49.9871570Z   ✘  22 [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) (retry #1) (16.0s)
2026-05-16T02:39:55.2510366Z   ✓  23 [chromium] › test/e2e/cli-08-nameplate-offset.e2e.test.ts:30:1 › nameplate sits above sprite top (D-45) (4.5s)
2026-05-16T02:40:40.5310916Z   ✓  24 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:37:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-right: nameplate_y flip count over 30s ≤ ceiling (Plan 06.4-12 D-45d gate) (45.2s)
2026-05-16T02:41:25.0800117Z   ✓  25 [chromium] › test/e2e/cli-08-nameplate-stable.spec.ts:125:3 › CLI-08 D-45d nameplate stability under remote motion › constant-vx walk-left (KeyA): symmetric stability — flips ≤ ceiling (locks symmetric fix) (44.5s)
2026-05-16T02:41:36.5428914Z   ✓  26 [chromium] › test/e2e/cli-08-nameplate.e2e.test.ts:24:1 › CLI-08 nameplate color — local cyan (#00FFFF), remote white (#FFFFFF) (Wave 4 GREEN gate) (11.4s)
2026-05-16T02:41:54.1796806Z   ✘  27 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (16.8s)
2026-05-16T02:42:12.8250684Z   ✘  28 [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works (retry #1) (17.0s)
2026-05-16T02:42:28.3957541Z   ✘  29 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (14.0s)
2026-05-16T02:42:56.5611460Z   ✘  30 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) (retry #1) (26.3s)
2026-05-16T02:43:12.7851824Z   ✘  31 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (14.6s)
2026-05-16T02:43:41.7883290Z   ✘  32 [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) (retry #1) (27.1s)
2026-05-16T02:44:04.8571568Z   ✘  33 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (20.8s)
2026-05-16T02:44:28.2372875Z   ✘  34 [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) (retry #1) (21.1s)
2026-05-16T02:44:47.9751038Z   ✘  35 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (17.7s)
2026-05-16T02:45:07.8706653Z   ✘  36 [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace (retry #1) (18.0s)
2026-05-16T02:45:10.3319156Z   ✓  37 [chromium] › test/e2e/login-contrast.e2e.test.ts:64:3 › LoginScene contrast › heading has ≥ 4.5:1 contrast ratio on #0A0E1A background (1.6s)
2026-05-16T02:45:11.8392683Z   ✓  38 [chromium] › test/e2e/login-contrast.e2e.test.ts:72:3 › LoginScene contrast › username label has ≥ 4.5:1 contrast ratio (1.5s)
2026-05-16T02:45:13.2860134Z   ✓  39 [chromium] › test/e2e/login-contrast.e2e.test.ts:78:3 › LoginScene contrast › password label has ≥ 4.5:1 contrast ratio (1.4s)
2026-05-16T02:45:14.8110307Z   ✓  40 [chromium] › test/e2e/login-contrast.e2e.test.ts:84:3 › LoginScene contrast › username input text has ≥ 4.5:1 contrast ratio (1.5s)
2026-05-16T02:45:16.2420707Z   ✓  41 [chromium] › test/e2e/login-contrast.e2e.test.ts:90:3 › LoginScene contrast › password input text has ≥ 4.5:1 contrast ratio (1.4s)
2026-05-16T02:45:17.7740732Z   ✓  42 [chromium] › test/e2e/login-contrast.e2e.test.ts:96:3 › LoginScene contrast › submit CTA button text has ≥ 4.5:1 contrast ratio (1.5s)
2026-05-16T02:45:19.2744631Z   ✓  43 [chromium] › test/e2e/login-contrast.e2e.test.ts:104:3 › LoginScene contrast › focused input border-color is accent #22D3EE (rgb 34,211,238) (1.5s)
2026-05-16T02:45:29.5699635Z   ✘  44 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (9.8s)
2026-05-16T02:45:40.8627408Z   ✘  45 [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) (retry #1) (10.0s)
2026-05-16T02:45:46.6058521Z   ✓  46 [chromium] › test/e2e/logout.e2e.test.ts:51:3 › Esc menu › canvas click opens menu (D-24 secondary trigger) (4.9s)
2026-05-16T02:45:52.0323416Z   ✓  47 [chromium] › test/e2e/logout.e2e.test.ts:69:3 › Esc menu › Resume closes menu and re-engages movement without navigating (5.4s)
2026-05-16T02:45:57.8623306Z   ✘  48 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (5.4s)
2026-05-16T02:46:16.7739191Z   ✘  49 [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop (retry #1) (17.8s)
2026-05-16T02:46:21.7561437Z   ✓  50 [chromium] › test/e2e/sprite-state.e2e.test.ts:48:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate DOM mirror is visible for self (count >= 1) (4.2s)
2026-05-16T02:46:25.8793058Z   ✓  51 [chromium] › test/e2e/sprite-state.e2e.test.ts:61:3 › sprite-state machine (D-35) + nametag (D-27a) › nameplate text content matches logged-in username (4.1s)
2026-05-16T02:46:34.0969541Z   ✓  52 [chromium] › test/e2e/ws-kill-reconnect.e2e.test.ts:16:1 › WS-kill: login → kill WS → SDK reconnects within grace → canvas still truthy + chat round-trips (8.2s)
2026-05-16T02:46:34.1533701Z 
2026-05-16T02:46:34.1542075Z 
2026-05-16T02:46:34.1562735Z   1) [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-16T02:46:34.1563850Z 
2026-05-16T02:46:34.1564397Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-16T02:46:34.1565059Z 
2026-05-16T02:46:34.1566092Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1566996Z 
2026-05-16T02:46:34.1567456Z     Expected: >= [32m8[39m
2026-05-16T02:46:34.1568518Z     Received:    [31m0[39m
2026-05-16T02:46:34.1569028Z 
2026-05-16T02:46:34.1569312Z       80 |     cameraDelta,
2026-05-16T02:46:34.1570421Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-16T02:46:34.1571599Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-16T02:46:34.1572220Z          |     ^
2026-05-16T02:46:34.1572697Z       83 |
2026-05-16T02:46:34.1573463Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-16T02:46:34.1574606Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-16T02:46:34.1575842Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-16T02:46:34.1577264Z 
2026-05-16T02:46:34.1578393Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1581620Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/test-failed-1.png
2026-05-16T02:46:34.1583218Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1583915Z 
2026-05-16T02:46:34.1584849Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1586304Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/video.webm
2026-05-16T02:46:34.1587902Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1589010Z 
2026-05-16T02:46:34.1589988Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/error-context.md
2026-05-16T02:46:34.1591091Z 
2026-05-16T02:46:34.1592050Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1593494Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-16T02:46:34.1594536Z     Usage:
2026-05-16T02:46:34.1594844Z 
2026-05-16T02:46:34.1595903Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium/trace.zip
2026-05-16T02:46:34.1597090Z 
2026-05-16T02:46:34.1598278Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1598997Z 
2026-05-16T02:46:34.1599931Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1600634Z 
2026-05-16T02:46:34.1601100Z     Error: Camera did not pan: before=(120,160) after=(120,160)
2026-05-16T02:46:34.1601727Z 
2026-05-16T02:46:34.1602662Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1603536Z 
2026-05-16T02:46:34.1603907Z     Expected: >= [32m8[39m
2026-05-16T02:46:34.1604511Z     Received:    [31m0[39m
2026-05-16T02:46:34.1604878Z 
2026-05-16T02:46:34.1605129Z       80 |     cameraDelta,
2026-05-16T02:46:34.1606133Z       81 |     `Camera did not pan: before=(${before.scrollX},${before.scrollY}) after=(${after.scrollX},${after.scrollY})`,
2026-05-16T02:46:34.1607224Z     > 82 |   ).toBeGreaterThanOrEqual(8);
2026-05-16T02:46:34.1607819Z          |     ^
2026-05-16T02:46:34.1608551Z       83 |
2026-05-16T02:46:34.1609300Z       84 |   // 8. Secondary: player moved (position changed on at least one axis).
2026-05-16T02:46:34.1610398Z       85 |   const playerMoved = after.x !== before.x || after.y !== before.y;
2026-05-16T02:46:34.1611608Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/camera-follow.e2e.test.ts:82:5
2026-05-16T02:46:34.1612335Z 
2026-05-16T02:46:34.1613982Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1615605Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.1617386Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1618372Z 
2026-05-16T02:46:34.1619352Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1620881Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/video.webm
2026-05-16T02:46:34.1622600Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1623302Z 
2026-05-16T02:46:34.1624321Z     Error Context: test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/error-context.md
2026-05-16T02:46:34.1625486Z 
2026-05-16T02:46:34.1626441Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1627939Z     test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-16T02:46:34.1629600Z     Usage:
2026-05-16T02:46:34.1630117Z 
2026-05-16T02:46:34.1631407Z         pnpm exec playwright show-trace test-results/camera-follow.e2e-Camera-f-1d2af--the-camera-D-29-mandatory--chromium-retry1/trace.zip
2026-05-16T02:46:34.1632822Z 
2026-05-16T02:46:34.1633730Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1634502Z 
2026-05-16T02:46:34.1635914Z   2) [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-16T02:46:34.1637213Z 
2026-05-16T02:46:34.1641641Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-16T02:46:34.1645062Z 
2026-05-16T02:46:34.1646162Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1647120Z 
2026-05-16T02:46:34.1647564Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.1648566Z     Received:    [31m1[39m
2026-05-16T02:46:34.1649058Z 
2026-05-16T02:46:34.1649397Z       67 |     unique.size,
2026-05-16T02:46:34.1650768Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-16T02:46:34.1651994Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.1653178Z          |     ^
2026-05-16T02:46:34.1653714Z       70 |
2026-05-16T02:46:34.1654502Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-16T02:46:34.1655447Z       72 |   for (const f of unique) {
2026-05-16T02:46:34.1656629Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-16T02:46:34.1657491Z 
2026-05-16T02:46:34.1658709Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1660186Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T02:46:34.1661711Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1662512Z 
2026-05-16T02:46:34.1663537Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1665240Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T02:46:34.1666982Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1667717Z 
2026-05-16T02:46:34.1668966Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T02:46:34.1670065Z 
2026-05-16T02:46:34.1671056Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1672646Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.1673836Z     Usage:
2026-05-16T02:46:34.1674248Z 
2026-05-16T02:46:34.1675358Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.1676538Z 
2026-05-16T02:46:34.1677444Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1678526Z 
2026-05-16T02:46:34.1679383Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1680161Z 
2026-05-16T02:46:34.1684323Z     Error: Expected ≥3 distinct frame keys during 1s hold; observed 1 (samples=0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000)
2026-05-16T02:46:34.1687703Z 
2026-05-16T02:46:34.1689032Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1690055Z 
2026-05-16T02:46:34.1690543Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.1691359Z     Received:    [31m1[39m
2026-05-16T02:46:34.1692281Z 
2026-05-16T02:46:34.1692661Z       67 |     unique.size,
2026-05-16T02:46:34.1694146Z       68 |     `Expected ≥3 distinct frame keys during 1s hold; observed ${unique.size} (samples=${samples.join(',')})`,
2026-05-16T02:46:34.1695488Z     > 69 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.1696249Z          |     ^
2026-05-16T02:46:34.1696776Z       70 |
2026-05-16T02:46:34.1697508Z       71 |   // 4. Each observed frame must match a NaviRun* pattern (sanity).
2026-05-16T02:46:34.1698758Z       72 |   for (const f of unique) {
2026-05-16T02:46:34.1699857Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-anim.e2e.test.ts:69:5
2026-05-16T02:46:34.1700726Z 
2026-05-16T02:46:34.1701748Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1703501Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.1705445Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1706267Z 
2026-05-16T02:46:34.1707290Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1709190Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T02:46:34.1711015Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1712016Z 
2026-05-16T02:46:34.1713199Z     Error Context: test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T02:46:34.1714453Z 
2026-05-16T02:46:34.1715560Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1717183Z     test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.1718664Z     Usage:
2026-05-16T02:46:34.1719058Z 
2026-05-16T02:46:34.1720230Z         pnpm exec playwright show-trace test-results/cli-08-anim.e2e-CLI-08-ani-dae11-eyD-hold-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.1721529Z 
2026-05-16T02:46:34.1722452Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1723276Z 
2026-05-16T02:46:34.1724651Z   3) [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-16T02:46:34.1725853Z 
2026-05-16T02:46:34.1726370Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-16T02:46:34.1726977Z 
2026-05-16T02:46:34.1727939Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1729157Z 
2026-05-16T02:46:34.1729672Z     Expected: > [32m15[39m
2026-05-16T02:46:34.1730455Z     Received:   [31m0[39m
2026-05-16T02:46:34.1731441Z 
2026-05-16T02:46:34.1731942Z       83 |     (after as number) - (before as number),
2026-05-16T02:46:34.1733014Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-16T02:46:34.1733997Z     > 85 |   ).toBeGreaterThan(15);
2026-05-16T02:46:34.1734663Z          |     ^
2026-05-16T02:46:34.1735209Z       86 | });
2026-05-16T02:46:34.1735724Z       87 |
2026-05-16T02:46:34.1736678Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-16T02:46:34.1737586Z 
2026-05-16T02:46:34.1738872Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1740474Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T02:46:34.1742238Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1743026Z 
2026-05-16T02:46:34.1744012Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1745540Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T02:46:34.1747225Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1748363Z 
2026-05-16T02:46:34.1749380Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T02:46:34.1750279Z 
2026-05-16T02:46:34.1751083Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1752285Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.1753373Z     Usage:
2026-05-16T02:46:34.1753744Z 
2026-05-16T02:46:34.1754850Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.1756199Z 
2026-05-16T02:46:34.1757100Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1757863Z 
2026-05-16T02:46:34.1759125Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1759843Z 
2026-05-16T02:46:34.1760365Z     Error: Camera scrollX did not advance: before=120 after=120
2026-05-16T02:46:34.1760980Z 
2026-05-16T02:46:34.1761859Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.1762703Z 
2026-05-16T02:46:34.1763134Z     Expected: > [32m15[39m
2026-05-16T02:46:34.1763841Z     Received:   [31m0[39m
2026-05-16T02:46:34.1764319Z 
2026-05-16T02:46:34.1764751Z       83 |     (after as number) - (before as number),
2026-05-16T02:46:34.1765688Z       84 |     `Camera scrollX did not advance: before=${before} after=${after}`,
2026-05-16T02:46:34.1767061Z     > 85 |   ).toBeGreaterThan(15);
2026-05-16T02:46:34.1767654Z          |     ^
2026-05-16T02:46:34.1768385Z       86 | });
2026-05-16T02:46:34.1768885Z       87 |
2026-05-16T02:46:34.1769743Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-camera.e2e.test.ts:85:5
2026-05-16T02:46:34.1770531Z 
2026-05-16T02:46:34.1771416Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1772943Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.1774718Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1775417Z 
2026-05-16T02:46:34.1776286Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1777705Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T02:46:34.1779588Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1780281Z 
2026-05-16T02:46:34.1781278Z     Error Context: test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T02:46:34.1782362Z 
2026-05-16T02:46:34.1783235Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1784669Z     test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.1785735Z     Usage:
2026-05-16T02:46:34.1786074Z 
2026-05-16T02:46:34.1787164Z         pnpm exec playwright show-trace test-results/cli-08-camera.e2e-CLI-08-c-29d96--scrollX-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.1788516Z 
2026-05-16T02:46:34.1789310Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1790026Z 
2026-05-16T02:46:34.1791347Z   4) [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-16T02:46:34.1792494Z 
2026-05-16T02:46:34.1793287Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.1794042Z 
2026-05-16T02:46:34.1794538Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.1795355Z     Expected: visible
2026-05-16T02:46:34.1795895Z     Timeout: 15000ms
2026-05-16T02:46:34.1796471Z     Error: element(s) not found
2026-05-16T02:46:34.1796919Z 
2026-05-16T02:46:34.1797209Z     Call log:
2026-05-16T02:46:34.1798243Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.1799334Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.1799969Z 
2026-05-16T02:46:34.1800135Z 
2026-05-16T02:46:34.1800452Z        at fixtures.ts:172
2026-05-16T02:46:34.1801263Z 
2026-05-16T02:46:34.1801564Z       170 |  */
2026-05-16T02:46:34.1802333Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.1803486Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.1804478Z           |                                                                ^
2026-05-16T02:46:34.1805207Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.1805763Z       174 |   });
2026-05-16T02:46:34.1806246Z       175 | }
2026-05-16T02:46:34.1807159Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.1808825Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-direction-convergence.spec.ts:95:11
2026-05-16T02:46:34.1809729Z 
2026-05-16T02:46:34.1810621Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1812143Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-1.png
2026-05-16T02:46:34.1813783Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1814452Z 
2026-05-16T02:46:34.1815654Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1817139Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/test-failed-2.png
2026-05-16T02:46:34.1818965Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1819659Z 
2026-05-16T02:46:34.1820647Z     Error Context: test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/error-context.md
2026-05-16T02:46:34.1821701Z 
2026-05-16T02:46:34.1822593Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1824016Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-16T02:46:34.1825123Z     Usage:
2026-05-16T02:46:34.1825479Z 
2026-05-16T02:46:34.1826538Z         pnpm exec playwright show-trace test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium/trace.zip
2026-05-16T02:46:34.1827675Z 
2026-05-16T02:46:34.1828789Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1829511Z 
2026-05-16T02:46:34.1830320Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1831023Z 
2026-05-16T02:46:34.1832526Z     Error: Test 1 — pageB firstRemoteDirection must be R (server-broadcast facing reaches remote viewer via PlayerState.facing → setRemoteFacing per Plan 06.4-10 Task 3).
2026-05-16T02:46:34.1833754Z 
2026-05-16T02:46:34.1834579Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBe[2m([22m[32mexpected[39m[2m) // Object.is equality[22m
2026-05-16T02:46:34.1835838Z 
2026-05-16T02:46:34.1836247Z     Expected: [32m"R"[39m
2026-05-16T02:46:34.1836793Z     Received: [31m"D"[39m
2026-05-16T02:46:34.1837161Z 
2026-05-16T02:46:34.1837728Z       122 |         'facing reaches remote viewer via PlayerState.facing → ' +
2026-05-16T02:46:34.1838941Z       123 |         'setRemoteFacing per Plan 06.4-10 Task 3).',
2026-05-16T02:46:34.1839565Z     > 124 |     ).toBe('R');
2026-05-16T02:46:34.1840041Z           |       ^
2026-05-16T02:46:34.1840473Z       125 |
2026-05-16T02:46:34.1841071Z       126 |     // 4. Test 2: continued idle preserves 'R' on both viewers.
2026-05-16T02:46:34.1842047Z       127 |     // deriveFacing's idle-preserve branch: Math.hypot(0,0) <= VELOCITY_THRESHOLD
2026-05-16T02:46:34.1843240Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-direction-convergence.spec.ts:124:7
2026-05-16T02:46:34.1844020Z 
2026-05-16T02:46:34.1844801Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1846177Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.1847670Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1848518Z 
2026-05-16T02:46:34.1849294Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1850643Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium-retry1/test-failed-2.png
2026-05-16T02:46:34.1852055Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1852632Z 
2026-05-16T02:46:34.1853530Z     Error Context: test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium-retry1/error-context.md
2026-05-16T02:46:34.1854495Z 
2026-05-16T02:46:34.1855454Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1856788Z     test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium-retry1/trace.zip
2026-05-16T02:46:34.1857734Z     Usage:
2026-05-16T02:46:34.1858245Z 
2026-05-16T02:46:34.1859221Z         pnpm exec playwright show-trace test-results/cli-08-direction-convergen-cbd92-RV-03-server-authoritative--chromium-retry1/trace.zip
2026-05-16T02:46:34.1860249Z 
2026-05-16T02:46:34.1860933Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1861512Z 
2026-05-16T02:46:34.1862785Z   5) [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-16T02:46:34.1863893Z 
2026-05-16T02:46:34.1864566Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.1865216Z 
2026-05-16T02:46:34.1865757Z     Locator: locator('#username')
2026-05-16T02:46:34.1866456Z     Expected: visible
2026-05-16T02:46:34.1866921Z     Timeout: 15000ms
2026-05-16T02:46:34.1867421Z     Error: element(s) not found
2026-05-16T02:46:34.1867794Z 
2026-05-16T02:46:34.1868234Z     Call log:
2026-05-16T02:46:34.1868896Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.1869662Z     [2m  - waiting for locator('#username')[22m
2026-05-16T02:46:34.1870114Z 
2026-05-16T02:46:34.1870264Z 
2026-05-16T02:46:34.1870897Z       37 |       // SOURCE: GameScene.ts onForceReset transitions to LoginScene with an eviction banner.
2026-05-16T02:46:34.1872000Z       38 |       // The force_reset s2c event causes A1 to leave the room and start LoginScene.
2026-05-16T02:46:34.1873031Z     > 39 |       await expect(pageA1.locator('#username')).toBeVisible({ timeout: 15_000 });
2026-05-16T02:46:34.1873861Z          |                                                 ^
2026-05-16T02:46:34.1874412Z       40 |     } finally {
2026-05-16T02:46:34.1874948Z       41 |       await ctxA1.close();
2026-05-16T02:46:34.1875507Z       42 |       await ctxA2.close();
2026-05-16T02:46:34.1876360Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:39:49
2026-05-16T02:46:34.1877053Z 
2026-05-16T02:46:34.1877797Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1880087Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-1.png
2026-05-16T02:46:34.1881450Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1882046Z 
2026-05-16T02:46:34.1882781Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1884032Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/test-failed-2.png
2026-05-16T02:46:34.1885493Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1886300Z 
2026-05-16T02:46:34.1887260Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/error-context.md
2026-05-16T02:46:34.1888499Z 
2026-05-16T02:46:34.1889412Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.1890940Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-16T02:46:34.1892478Z     Usage:
2026-05-16T02:46:34.1892888Z 
2026-05-16T02:46:34.1893901Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium/trace.zip
2026-05-16T02:46:34.1894980Z 
2026-05-16T02:46:34.1895779Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1896434Z 
2026-05-16T02:46:34.1897216Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1899006Z 
2026-05-16T02:46:34.1899971Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.1900718Z 
2026-05-16T02:46:34.1901067Z     Locator: locator('#username')
2026-05-16T02:46:34.1901643Z     Expected: visible
2026-05-16T02:46:34.1902157Z     Timeout: 15000ms
2026-05-16T02:46:34.1902707Z     Error: element(s) not found
2026-05-16T02:46:34.1903129Z 
2026-05-16T02:46:34.1903408Z     Call log:
2026-05-16T02:46:34.1904205Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.1905535Z     [2m  - waiting for locator('#username')[22m
2026-05-16T02:46:34.1906127Z 
2026-05-16T02:46:34.1906315Z 
2026-05-16T02:46:34.1907054Z       37 |       // SOURCE: GameScene.ts onForceReset transitions to LoginScene with an eviction banner.
2026-05-16T02:46:34.1908511Z       38 |       // The force_reset s2c event causes A1 to leave the room and start LoginScene.
2026-05-16T02:46:34.1909760Z     > 39 |       await expect(pageA1.locator('#username')).toBeVisible({ timeout: 15_000 });
2026-05-16T02:46:34.1910870Z          |                                                 ^
2026-05-16T02:46:34.1911814Z       40 |     } finally {
2026-05-16T02:46:34.1912442Z       41 |       await ctxA1.close();
2026-05-16T02:46:34.1913082Z       42 |       await ctxA2.close();
2026-05-16T02:46:34.1914057Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-dup-login.e2e.test.ts:39:49
2026-05-16T02:46:34.1914909Z 
2026-05-16T02:46:34.1915861Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1917384Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.1919354Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1920009Z 
2026-05-16T02:46:34.1920865Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.1924640Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/test-failed-2.png
2026-05-16T02:46:34.1926522Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.1927209Z 
2026-05-16T02:46:34.1928538Z     Error Context: test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/error-context.md
2026-05-16T02:46:34.1929791Z 
2026-05-16T02:46:34.1930688Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2009346Z     test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-16T02:46:34.2048541Z     Usage:
2026-05-16T02:46:34.2088303Z 
2026-05-16T02:46:34.2129345Z         pnpm exec playwright show-trace test-results/cli-08-dup-login.e2e-D-51--ce872-irst-tab-reaches-LoginScene-chromium-retry1/trace.zip
2026-05-16T02:46:34.2188306Z 
2026-05-16T02:46:34.2209208Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2225783Z 
2026-05-16T02:46:34.2226923Z   6) [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-16T02:46:34.2227877Z 
2026-05-16T02:46:34.2232434Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-16T02:46:34.2235865Z 
2026-05-16T02:46:34.2236687Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2237433Z 
2026-05-16T02:46:34.2237782Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.2238557Z     Received:    [31m1[39m
2026-05-16T02:46:34.2238936Z 
2026-05-16T02:46:34.2239429Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-16T02:46:34.2240644Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-16T02:46:34.2241819Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.2242361Z          |     ^
2026-05-16T02:46:34.2242776Z       86 |
2026-05-16T02:46:34.2243635Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-16T02:46:34.2244628Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-16T02:46:34.2245680Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-16T02:46:34.2246570Z 
2026-05-16T02:46:34.2247419Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2248927Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/test-failed-1.png
2026-05-16T02:46:34.2250272Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2250866Z 
2026-05-16T02:46:34.2251591Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2252755Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/video.webm
2026-05-16T02:46:34.2254107Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2255115Z 
2026-05-16T02:46:34.2255918Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/error-context.md
2026-05-16T02:46:34.2256783Z 
2026-05-16T02:46:34.2257542Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2258961Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-16T02:46:34.2259821Z     Usage:
2026-05-16T02:46:34.2260127Z 
2026-05-16T02:46:34.2261005Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium/trace.zip
2026-05-16T02:46:34.2261942Z 
2026-05-16T02:46:34.2262688Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2263380Z 
2026-05-16T02:46:34.2264209Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2265319Z 
2026-05-16T02:46:34.2270620Z     Error: D-41 regression: expected ≥3 distinct localFrame keys during 1s KeyD hold; observed 1 (samples=[0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000,0000-NaviStandD_000]). Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.
2026-05-16T02:46:34.2274916Z 
2026-05-16T02:46:34.2275882Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2276730Z 
2026-05-16T02:46:34.2277322Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.2278641Z     Received:    [31m1[39m
2026-05-16T02:46:34.2279147Z 
2026-05-16T02:46:34.2279747Z       83 |       `observed ${unique.size} (samples=[${samples.join(',')}]). ` +
2026-05-16T02:46:34.2281230Z       84 |       `Symptom: Stand frame perma-lock — check axisX/axisY wiring in GameScene.update() while-loop.`,
2026-05-16T02:46:34.2282309Z     > 85 |   ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.2282920Z          |     ^
2026-05-16T02:46:34.2283383Z       86 |
2026-05-16T02:46:34.2284630Z       87 |   // 5. At least one observed frame key must contain 'Run' — confirms we left Stand state.
2026-05-16T02:46:34.2285876Z       88 |   const hasRunFrame = [...unique].some((f) => f.includes('Run'));
2026-05-16T02:46:34.2287088Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-local-anim.e2e.test.ts:85:5
2026-05-16T02:46:34.2287868Z 
2026-05-16T02:46:34.2289147Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2290712Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.2292464Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2293170Z 
2026-05-16T02:46:34.2294031Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2295462Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/video.webm
2026-05-16T02:46:34.2297009Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2297816Z 
2026-05-16T02:46:34.2299068Z     Error Context: test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/error-context.md
2026-05-16T02:46:34.2300262Z 
2026-05-16T02:46:34.2301151Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2302518Z     test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.2304096Z     Usage:
2026-05-16T02:46:34.2304510Z 
2026-05-16T02:46:34.2305549Z         pnpm exec playwright show-trace test-results/cli-08-local-anim.e2e-loca-e72c5--D-41-anti-recurrence-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.2306694Z 
2026-05-16T02:46:34.2307586Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2311982Z 
2026-05-16T02:46:34.2313845Z   7) [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-16T02:46:34.2315381Z 
2026-05-16T02:46:34.2315808Z     Error: tilesOut must be > 0 on cookie-resume
2026-05-16T02:46:34.2316343Z 
2026-05-16T02:46:34.2317217Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2318474Z 
2026-05-16T02:46:34.2319003Z     Expected: > [32m0[39m
2026-05-16T02:46:34.2319681Z     Received:   [31m0[39m
2026-05-16T02:46:34.2320117Z 
2026-05-16T02:46:34.2320412Z     Call Log:
2026-05-16T02:46:34.2321125Z     - Timeout 10000ms exceeded while waiting on the predicate
2026-05-16T02:46:34.2321767Z 
2026-05-16T02:46:34.2322592Z       63 |   // appended to the Phaser scene — a non-zero value proves the renderer received
2026-05-16T02:46:34.2323736Z       64 |   // a layout payload AND completed the renderNew path.
2026-05-16T02:46:34.2324508Z     > 65 |   await expect
2026-05-16T02:46:34.2325103Z          |   ^
2026-05-16T02:46:34.2325597Z       66 |     .poll(
2026-05-16T02:46:34.2326120Z       67 |       async () =>
2026-05-16T02:46:34.2326713Z       68 |         page.evaluate(
2026-05-16T02:46:34.2328608Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:65:3
2026-05-16T02:46:34.2329460Z 
2026-05-16T02:46:34.2330336Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2331681Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/test-failed-1.png
2026-05-16T02:46:34.2333024Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2333590Z 
2026-05-16T02:46:34.2334291Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2335621Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/video.webm
2026-05-16T02:46:34.2337433Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2338512Z 
2026-05-16T02:46:34.2339555Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/error-context.md
2026-05-16T02:46:34.2340718Z 
2026-05-16T02:46:34.2341657Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2343519Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-16T02:46:34.2344541Z     Usage:
2026-05-16T02:46:34.2344876Z 
2026-05-16T02:46:34.2345902Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium/trace.zip
2026-05-16T02:46:34.2346998Z 
2026-05-16T02:46:34.2347775Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2348738Z 
2026-05-16T02:46:34.2349546Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2350209Z 
2026-05-16T02:46:34.2350612Z     Error: tilesOut must be > 0 on cookie-resume
2026-05-16T02:46:34.2351131Z 
2026-05-16T02:46:34.2351982Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2352782Z 
2026-05-16T02:46:34.2353258Z     Expected: > [32m0[39m
2026-05-16T02:46:34.2353936Z     Received:   [31m0[39m
2026-05-16T02:46:34.2354335Z 
2026-05-16T02:46:34.2354625Z     Call Log:
2026-05-16T02:46:34.2355285Z     - Timeout 10000ms exceeded while waiting on the predicate
2026-05-16T02:46:34.2355867Z 
2026-05-16T02:46:34.2356643Z       63 |   // appended to the Phaser scene — a non-zero value proves the renderer received
2026-05-16T02:46:34.2357684Z       64 |   // a layout payload AND completed the renderNew path.
2026-05-16T02:46:34.2358771Z     > 65 |   await expect
2026-05-16T02:46:34.2359304Z          |   ^
2026-05-16T02:46:34.2359787Z       66 |     .poll(
2026-05-16T02:46:34.2360290Z       67 |       async () =>
2026-05-16T02:46:34.2360877Z       68 |         page.evaluate(
2026-05-16T02:46:34.2361849Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-resume-render.spec.ts:65:3
2026-05-16T02:46:34.2362644Z 
2026-05-16T02:46:34.2363516Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2365077Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.2366752Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2367474Z 
2026-05-16T02:46:34.2368489Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2369947Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/video.webm
2026-05-16T02:46:34.2371528Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2372167Z 
2026-05-16T02:46:34.2373181Z     Error Context: test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/error-context.md
2026-05-16T02:46:34.2374258Z 
2026-05-16T02:46:34.2375117Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2377005Z     test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-16T02:46:34.2378278Z     Usage:
2026-05-16T02:46:34.2378619Z 
2026-05-16T02:46:34.2379708Z         pnpm exec playwright show-trace test-results/cli-08-resume-render-cli-0-3a9cd-enders-within-5s-chat-works-chromium-retry1/trace.zip
2026-05-16T02:46:34.2380869Z 
2026-05-16T02:46:34.2381642Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2382295Z 
2026-05-16T02:46:34.2383750Z   8) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-16T02:46:34.2384922Z 
2026-05-16T02:46:34.2386180Z     Error: Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).
2026-05-16T02:46:34.2387299Z 
2026-05-16T02:46:34.2388428Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2389293Z 
2026-05-16T02:46:34.2389659Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.2390271Z     Received:    [31m2[39m
2026-05-16T02:46:34.2390745Z 
2026-05-16T02:46:34.2391597Z       106 |       'Expected ≥3 firstRemoteFrame samples on B during 1s window (telemetry ' +
2026-05-16T02:46:34.2393172Z       107 |         'must publish — PlayerRenderer.onSimulationTickRemote at 30 Hz).',
2026-05-16T02:46:34.2394352Z     > 108 |     ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.2395157Z           |       ^
2026-05-16T02:46:34.2410022Z       109 |     const teleInSamplesB = samplesB.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-16T02:46:34.2411115Z       110 |     expect(
2026-05-16T02:46:34.2411698Z       111 |       teleInSamplesB,
2026-05-16T02:46:34.2412779Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:108:7
2026-05-16T02:46:34.2413686Z 
2026-05-16T02:46:34.2414605Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2416117Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-1.png
2026-05-16T02:46:34.2417701Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2418692Z 
2026-05-16T02:46:34.2419558Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2421019Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/test-failed-2.png
2026-05-16T02:46:34.2422587Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2423277Z 
2026-05-16T02:46:34.2424209Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/error-context.md
2026-05-16T02:46:34.2425682Z 
2026-05-16T02:46:34.2426528Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2427924Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-16T02:46:34.2429158Z     Usage:
2026-05-16T02:46:34.2429494Z 
2026-05-16T02:46:34.2430498Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium/trace.zip
2026-05-16T02:46:34.2431585Z 
2026-05-16T02:46:34.2432374Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2433020Z 
2026-05-16T02:46:34.2433787Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2434455Z 
2026-05-16T02:46:34.2435203Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.2435983Z 
2026-05-16T02:46:34.2436418Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.2437093Z     Expected: visible
2026-05-16T02:46:34.2437600Z     Timeout: 15000ms
2026-05-16T02:46:34.2438337Z     Error: element(s) not found
2026-05-16T02:46:34.2438771Z 
2026-05-16T02:46:34.2439056Z     Call log:
2026-05-16T02:46:34.2439790Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.2440786Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.2441396Z 
2026-05-16T02:46:34.2441537Z 
2026-05-16T02:46:34.2441818Z        at fixtures.ts:172
2026-05-16T02:46:34.2442213Z 
2026-05-16T02:46:34.2442480Z       170 |  */
2026-05-16T02:46:34.2443236Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.2444366Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.2445343Z           |                                                                ^
2026-05-16T02:46:34.2446087Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.2446749Z       174 |   });
2026-05-16T02:46:34.2447308Z       175 | }
2026-05-16T02:46:34.2448594Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.2450055Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:91:11
2026-05-16T02:46:34.2450920Z 
2026-05-16T02:46:34.2451764Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2453364Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.2454987Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2455631Z 
2026-05-16T02:46:34.2456459Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2458666Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/test-failed-2.png
2026-05-16T02:46:34.2460318Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2460971Z 
2026-05-16T02:46:34.2461981Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/error-context.md
2026-05-16T02:46:34.2463088Z 
2026-05-16T02:46:34.2463977Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2465473Z     test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-16T02:46:34.2466536Z     Usage:
2026-05-16T02:46:34.2466851Z 
2026-05-16T02:46:34.2467942Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-0d3d7-im-for-pre-existing-remote--chromium-retry1/trace.zip
2026-05-16T02:46:34.2469294Z 
2026-05-16T02:46:34.2470102Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2470762Z 
2026-05-16T02:46:34.2472341Z   9) [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-16T02:46:34.2473693Z 
2026-05-16T02:46:34.2475427Z     Error: Expected ≥3 firstRemoteFrame samples on A during 800 ms window (telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate AND onSimulationTickRemote both write the field).
2026-05-16T02:46:34.2476929Z 
2026-05-16T02:46:34.2477838Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThanOrEqual[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2478920Z 
2026-05-16T02:46:34.2479463Z     Expected: >= [32m3[39m
2026-05-16T02:46:34.2480216Z     Received:    [31m2[39m
2026-05-16T02:46:34.2480630Z 
2026-05-16T02:46:34.2481427Z       186 |         '(telemetry must publish — PlayerRenderer.startTeleportAnim onUpdate ' +
2026-05-16T02:46:34.2482535Z       187 |         'AND onSimulationTickRemote both write the field).',
2026-05-16T02:46:34.2483355Z     > 188 |     ).toBeGreaterThanOrEqual(3);
2026-05-16T02:46:34.2483961Z           |       ^
2026-05-16T02:46:34.2484811Z       189 |     const teleInSamplesA = samplesA.filter((f) => TELEPORT_FRAME_REGEX.test(f));
2026-05-16T02:46:34.2485780Z       190 |     expect(
2026-05-16T02:46:34.2486353Z       191 |       teleInSamplesA.length,
2026-05-16T02:46:34.2487449Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:188:7
2026-05-16T02:46:34.2488491Z 
2026-05-16T02:46:34.2489350Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2490799Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-1.png
2026-05-16T02:46:34.2492364Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2493491Z 
2026-05-16T02:46:34.2494470Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2495930Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/test-failed-2.png
2026-05-16T02:46:34.2497500Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2498352Z 
2026-05-16T02:46:34.2499319Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/error-context.md
2026-05-16T02:46:34.2500343Z 
2026-05-16T02:46:34.2501192Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2502586Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-16T02:46:34.2503589Z     Usage:
2026-05-16T02:46:34.2503970Z 
2026-05-16T02:46:34.2504986Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium/trace.zip
2026-05-16T02:46:34.2506086Z 
2026-05-16T02:46:34.2506852Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2507490Z 
2026-05-16T02:46:34.2508430Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2509110Z 
2026-05-16T02:46:34.2510013Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.2510653Z 
2026-05-16T02:46:34.2510931Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.2511459Z     Expected: visible
2026-05-16T02:46:34.2511818Z     Timeout: 15000ms
2026-05-16T02:46:34.2512218Z     Error: element(s) not found
2026-05-16T02:46:34.2512496Z 
2026-05-16T02:46:34.2512631Z     Call log:
2026-05-16T02:46:34.2513213Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.2514054Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.2514499Z 
2026-05-16T02:46:34.2514510Z 
2026-05-16T02:46:34.2514668Z        at fixtures.ts:172
2026-05-16T02:46:34.2514911Z 
2026-05-16T02:46:34.2515041Z       170 |  */
2026-05-16T02:46:34.2515641Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.2516488Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.2517224Z           |                                                                ^
2026-05-16T02:46:34.2517704Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.2518288Z       174 |   });
2026-05-16T02:46:34.2518567Z       175 | }
2026-05-16T02:46:34.2519223Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.2520352Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:176:11
2026-05-16T02:46:34.2521376Z 
2026-05-16T02:46:34.2522003Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2523196Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.2524462Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2524900Z 
2026-05-16T02:46:34.2525485Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2526657Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/test-failed-2.png
2026-05-16T02:46:34.2527916Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2528538Z 
2026-05-16T02:46:34.2529303Z     Error Context: test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/error-context.md
2026-05-16T02:46:34.2530180Z 
2026-05-16T02:46:34.2530783Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2531907Z     test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-16T02:46:34.2532711Z     Usage:
2026-05-16T02:46:34.2532867Z 
2026-05-16T02:46:34.2533697Z         pnpm exec playwright show-trace test-results/cli-08-snapshot-no-spawn-a-ece4a-eserves-new-join-semantics--chromium-retry1/trace.zip
2026-05-16T02:46:34.2534581Z 
2026-05-16T02:46:34.2535110Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2535546Z 
2026-05-16T02:46:34.2536400Z   10) [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-16T02:46:34.2537182Z 
2026-05-16T02:46:34.2537786Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-16T02:46:34.2538616Z 
2026-05-16T02:46:34.2539217Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2539756Z 
2026-05-16T02:46:34.2539937Z     Expected: > [32m0[39m
2026-05-16T02:46:34.2540321Z     Received:   [31m0[39m
2026-05-16T02:46:34.2540523Z 
2026-05-16T02:46:34.2540637Z     Call Log:
2026-05-16T02:46:34.2541060Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-16T02:46:34.2541428Z 
2026-05-16T02:46:34.2541816Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-16T02:46:34.2542668Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-16T02:46:34.2543248Z     > 57 |   await expect
2026-05-16T02:46:34.2543557Z          |   ^
2026-05-16T02:46:34.2543827Z       58 |     .poll(
2026-05-16T02:46:34.2544449Z       59 |       async () =>
2026-05-16T02:46:34.2544816Z       60 |         page.evaluate(
2026-05-16T02:46:34.2545480Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-16T02:46:34.2546002Z 
2026-05-16T02:46:34.2546600Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.2547691Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/test-failed-1.png
2026-05-16T02:46:34.2549079Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2549506Z 
2026-05-16T02:46:34.2550088Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2551106Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/video.webm
2026-05-16T02:46:34.2552316Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2552785Z 
2026-05-16T02:46:34.2553454Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/error-context.md
2026-05-16T02:46:34.2554186Z 
2026-05-16T02:46:34.2554775Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.2555808Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.2556511Z     Usage:
2026-05-16T02:46:34.2556667Z 
2026-05-16T02:46:34.2557395Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium/trace.zip
2026-05-16T02:46:34.2558371Z 
2026-05-16T02:46:34.2558902Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2559337Z 
2026-05-16T02:46:34.2559869Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.2560348Z 
2026-05-16T02:46:34.2560944Z     Error: RoomRenderer.renderNew must emit floor tile sprites for mvp-room (D-40 verify-bail flip / Plan 06.1-05)
2026-05-16T02:46:34.2561917Z 
2026-05-16T02:46:34.2562521Z     [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.2563066Z 
2026-05-16T02:46:34.2563241Z     Expected: > [32m0[39m
2026-05-16T02:46:34.2563616Z     Received:   [31m0[39m
2026-05-16T02:46:34.2563826Z 
2026-05-16T02:46:34.2563933Z     Call Log:
2026-05-16T02:46:34.2564353Z     - Timeout 15000ms exceeded while waiting on the predicate
2026-05-16T02:46:34.2564713Z 
2026-05-16T02:46:34.2565101Z       55 |   //    once RoomRenderer.renderNew (Plan 06.1-05) has placed at least one tile
2026-05-16T02:46:34.2565951Z       56 |   //    via group.add(). mvp-room ships 324 tiles, so any positive count clears.
2026-05-16T02:46:34.2566523Z     > 57 |   await expect
2026-05-16T02:46:34.2567184Z          |   ^
2026-05-16T02:46:34.2567453Z       58 |     .poll(
2026-05-16T02:46:34.2567753Z       59 |       async () =>
2026-05-16T02:46:34.2568320Z       60 |         page.evaluate(
2026-05-16T02:46:34.2568990Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-tiles.e2e.test.ts:57:3
2026-05-16T02:46:34.2569515Z 
2026-05-16T02:46:34.9278756Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9292711Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.9294557Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9295341Z 
2026-05-16T02:46:34.9296256Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9297797Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/video.webm
2026-05-16T02:46:34.9299941Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9300663Z 
2026-05-16T02:46:34.9301714Z     Error Context: test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/error-context.md
2026-05-16T02:46:34.9302855Z 
2026-05-16T02:46:34.9303843Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9305398Z     test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.9306567Z     Usage:
2026-05-16T02:46:34.9306906Z 
2026-05-16T02:46:34.9308279Z         pnpm exec playwright show-trace test-results/cli-08-tiles.e2e-CLI-08-ti-2c8e9-e1-sides-Wave-4-GREEN-gate--chromium-retry1/trace.zip
2026-05-16T02:46:34.9309510Z 
2026-05-16T02:46:34.9310410Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9311190Z 
2026-05-16T02:46:34.9312626Z   11) [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-16T02:46:34.9313769Z 
2026-05-16T02:46:34.9314775Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.9315624Z 
2026-05-16T02:46:34.9316044Z     Expected: > [32m470[39m
2026-05-16T02:46:34.9316771Z     Received:   [31m440[39m
2026-05-16T02:46:34.9317255Z 
2026-05-16T02:46:34.9317637Z       78 |       .getAttribute('data-x-coord');
2026-05-16T02:46:34.9318832Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-16T02:46:34.9320507Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-16T02:46:34.9321701Z          |                    ^
2026-05-16T02:46:34.9322345Z       81 |
2026-05-16T02:46:34.9323185Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-16T02:46:34.9325253Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-16T02:46:34.9328964Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-16T02:46:34.9330607Z 
2026-05-16T02:46:34.9331469Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9332862Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-1.png
2026-05-16T02:46:34.9334345Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9334946Z 
2026-05-16T02:46:34.9335741Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9337114Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/test-failed-2.png
2026-05-16T02:46:34.9339022Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9339650Z 
2026-05-16T02:46:34.9340542Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/error-context.md
2026-05-16T02:46:34.9341473Z 
2026-05-16T02:46:34.9342275Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9343558Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-16T02:46:34.9344395Z     Usage:
2026-05-16T02:46:34.9344595Z 
2026-05-16T02:46:34.9345642Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium/trace.zip
2026-05-16T02:46:34.9347659Z 
2026-05-16T02:46:34.9348750Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9349408Z 
2026-05-16T02:46:34.9350243Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9350880Z 
2026-05-16T02:46:34.9351720Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoBeGreaterThan[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.9352489Z 
2026-05-16T02:46:34.9352843Z     Expected: > [32m470[39m
2026-05-16T02:46:34.9353522Z     Received:   [31m440[39m
2026-05-16T02:46:34.9353944Z 
2026-05-16T02:46:34.9354319Z       78 |       .getAttribute('data-x-coord');
2026-05-16T02:46:34.9355126Z       79 |     const afterX = Number(afterXStr ?? '0');
2026-05-16T02:46:34.9356303Z     > 80 |     expect(afterX).toBeGreaterThan(beforeX + 30); // ≥30 px movement; conservative.
2026-05-16T02:46:34.9357205Z          |                    ^
2026-05-16T02:46:34.9357716Z       81 |
2026-05-16T02:46:34.9358743Z       82 |     // (4) Chat round-trip. A presses Enter to focus chat, types, Enter to send.
2026-05-16T02:46:34.9359807Z       83 |     //     B sees a `.chat-line` matching `<sender>: <text>` within 5s.
2026-05-16T02:46:34.9361355Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08.e2e.test.ts:80:20
2026-05-16T02:46:34.9362006Z 
2026-05-16T02:46:34.9362895Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9364303Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.9365799Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9366367Z 
2026-05-16T02:46:34.9367125Z     attachment #2: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9368827Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/test-failed-2.png
2026-05-16T02:46:34.9370420Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9371063Z 
2026-05-16T02:46:34.9371994Z     Error Context: test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/error-context.md
2026-05-16T02:46:34.9373006Z 
2026-05-16T02:46:34.9373812Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9375171Z     test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-16T02:46:34.9376154Z     Usage:
2026-05-16T02:46:34.9376421Z 
2026-05-16T02:46:34.9377447Z         pnpm exec playwright show-trace test-results/cli-08.e2e-CLI-08-hard-mil-38a87--round-trip-reconnect-grace-chromium-retry1/trace.zip
2026-05-16T02:46:34.9378855Z 
2026-05-16T02:46:34.9380744Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9381497Z 
2026-05-16T02:46:34.9383159Z   12) [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-16T02:46:34.9384243Z 
2026-05-16T02:46:34.9385293Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.9385880Z 
2026-05-16T02:46:34.9386259Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-16T02:46:34.9386923Z     Expected: visible
2026-05-16T02:46:34.9388745Z     Timeout: 5000ms
2026-05-16T02:46:34.9389360Z     Error: element(s) not found
2026-05-16T02:46:34.9389789Z 
2026-05-16T02:46:34.9390048Z     Call log:
2026-05-16T02:46:34.9390838Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-16T02:46:34.9392023Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-16T02:46:34.9392709Z 
2026-05-16T02:46:34.9393746Z 
2026-05-16T02:46:34.9394017Z       36 |
2026-05-16T02:46:34.9394792Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-16T02:46:34.9395902Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-16T02:46:34.9397832Z          |                                                                           ^
2026-05-16T02:46:34.9398775Z       39 |       timeout: 5_000,
2026-05-16T02:46:34.9399228Z       40 |     });
2026-05-16T02:46:34.9399594Z       41 |
2026-05-16T02:46:34.9400295Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-16T02:46:34.9400886Z 
2026-05-16T02:46:34.9402063Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9403470Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/test-failed-1.png
2026-05-16T02:46:34.9405613Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9406174Z 
2026-05-16T02:46:34.9407246Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9408834Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/video.webm
2026-05-16T02:46:34.9410825Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9411744Z 
2026-05-16T02:46:34.9413705Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/error-context.md
2026-05-16T02:46:34.9415055Z 
2026-05-16T02:46:34.9416351Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9417855Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-16T02:46:34.9419312Z     Usage:
2026-05-16T02:46:34.9419643Z 
2026-05-16T02:46:34.9420674Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium/trace.zip
2026-05-16T02:46:34.9422143Z 
2026-05-16T02:46:34.9423319Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9424030Z 
2026-05-16T02:46:34.9424878Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9425595Z 
2026-05-16T02:46:34.9426422Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.9427188Z 
2026-05-16T02:46:34.9428299Z     Locator: locator('form#login-form, #login-form, #username')
2026-05-16T02:46:34.9429422Z     Expected: visible
2026-05-16T02:46:34.9429980Z     Timeout: 5000ms
2026-05-16T02:46:34.9430581Z     Error: element(s) not found
2026-05-16T02:46:34.9431374Z 
2026-05-16T02:46:34.9431658Z     Call log:
2026-05-16T02:46:34.9432454Z     [2m  - Expect "toBeVisible" with timeout 5000ms[22m
2026-05-16T02:46:34.9433581Z     [2m  - waiting for locator('form#login-form, #login-form, #username')[22m
2026-05-16T02:46:34.9434257Z 
2026-05-16T02:46:34.9435441Z 
2026-05-16T02:46:34.9435715Z       36 |
2026-05-16T02:46:34.9436467Z       37 |     // Should navigate back to LoginScene (login form heading visible)
2026-05-16T02:46:34.9438281Z     > 38 |     await expect(page.locator('form#login-form, #login-form, #username')).toBeVisible({
2026-05-16T02:46:34.9439351Z          |                                                                           ^
2026-05-16T02:46:34.9440094Z       39 |       timeout: 5_000,
2026-05-16T02:46:34.9440682Z       40 |     });
2026-05-16T02:46:34.9441156Z       41 |
2026-05-16T02:46:34.9441985Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/logout.e2e.test.ts:38:75
2026-05-16T02:46:34.9442761Z 
2026-05-16T02:46:34.9444139Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9445772Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.9447503Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9448482Z 
2026-05-16T02:46:34.9449380Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9450900Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/video.webm
2026-05-16T02:46:34.9452581Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9453277Z 
2026-05-16T02:46:34.9454297Z     Error Context: test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/error-context.md
2026-05-16T02:46:34.9455467Z 
2026-05-16T02:46:34.9456387Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9457893Z     test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-16T02:46:34.9459272Z     Usage:
2026-05-16T02:46:34.9459639Z 
2026-05-16T02:46:34.9460757Z         pnpm exec playwright show-trace test-results/logout.e2e-Esc-menu-Esc-op-3ce00-eared-session-cookies-D-34--chromium-retry1/trace.zip
2026-05-16T02:46:34.9461963Z 
2026-05-16T02:46:34.9462912Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9463619Z 
2026-05-16T02:46:34.9465255Z   13) [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-16T02:46:34.9466677Z 
2026-05-16T02:46:34.9467537Z     Error: [2mexpect([22m[31mreceived[39m[2m).[22mtoMatch[2m([22m[32mexpected[39m[2m)[22m
2026-05-16T02:46:34.9468555Z 
2026-05-16T02:46:34.9469115Z     Expected pattern: [32m/^0028-NaviRunR_\d{3}$/[39m
2026-05-16T02:46:34.9470112Z     Received string:  [31m"0000-NaviStandD_000"[39m
2026-05-16T02:46:34.9470682Z 
2026-05-16T02:46:34.9471403Z       32 |
2026-05-16T02:46:34.9472144Z       33 |     // Frame key must match Run R pattern: '0028-NaviRunR_NNN'
2026-05-16T02:46:34.9473178Z     > 34 |     expect(frameWhileRunning).toMatch(/^0028-NaviRunR_\d{3}$/);
2026-05-16T02:46:34.9474063Z          |                               ^
2026-05-16T02:46:34.9474686Z       35 |
2026-05-16T02:46:34.9475323Z       36 |     // Release right arrow and wait for stop
2026-05-16T02:46:34.9476128Z       37 |     await page.keyboard.up('ArrowRight');
2026-05-16T02:46:34.9477198Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:34:31
2026-05-16T02:46:34.9478252Z 
2026-05-16T02:46:34.9479208Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9480760Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/test-failed-1.png
2026-05-16T02:46:34.9482508Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9483278Z 
2026-05-16T02:46:34.9484203Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9485699Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/video.webm
2026-05-16T02:46:34.9487392Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9488383Z 
2026-05-16T02:46:34.9489449Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/error-context.md
2026-05-16T02:46:34.9490577Z 
2026-05-16T02:46:34.9491492Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9493010Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-16T02:46:34.9494057Z     Usage:
2026-05-16T02:46:34.9494358Z 
2026-05-16T02:46:34.9495412Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium/trace.zip
2026-05-16T02:46:34.9496660Z 
2026-05-16T02:46:34.9497506Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9498502Z 
2026-05-16T02:46:34.9499371Z     Retry #1 ───────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9500092Z 
2026-05-16T02:46:34.9500913Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.9501668Z 
2026-05-16T02:46:34.9502084Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.9502815Z     Expected: visible
2026-05-16T02:46:34.9503356Z     Timeout: 15000ms
2026-05-16T02:46:34.9503914Z     Error: element(s) not found
2026-05-16T02:46:34.9504349Z 
2026-05-16T02:46:34.9504620Z     Call log:
2026-05-16T02:46:34.9505456Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.9507088Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.9507759Z 
2026-05-16T02:46:34.9507887Z 
2026-05-16T02:46:34.9508447Z        at fixtures.ts:172
2026-05-16T02:46:34.9508875Z 
2026-05-16T02:46:34.9509139Z       170 |  */
2026-05-16T02:46:34.9509960Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.9511078Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.9512109Z           |                                                                ^
2026-05-16T02:46:34.9512832Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.9513406Z       174 |   });
2026-05-16T02:46:34.9513888Z       175 | }
2026-05-16T02:46:34.9514826Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.9516346Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/sprite-state.e2e.test.ts:22:11
2026-05-16T02:46:34.9517168Z 
2026-05-16T02:46:34.9518400Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9520086Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/test-failed-1.png
2026-05-16T02:46:34.9521861Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9522569Z 
2026-05-16T02:46:34.9523439Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9524767Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/video.webm
2026-05-16T02:46:34.9526181Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9526721Z 
2026-05-16T02:46:34.9527628Z     Error Context: test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/error-context.md
2026-05-16T02:46:34.9529281Z 
2026-05-16T02:46:34.9530176Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9531709Z     test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-16T02:46:34.9532801Z     Usage:
2026-05-16T02:46:34.9533117Z 
2026-05-16T02:46:34.9534223Z         pnpm exec playwright show-trace test-results/sprite-state.e2e-sprite-st-8eb1f-ement-back-to-Stand-on-stop-chromium-retry1/trace.zip
2026-05-16T02:46:34.9535411Z 
2026-05-16T02:46:34.9536198Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9536874Z 
2026-05-16T02:46:34.9538224Z   14) [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) 
2026-05-16T02:46:34.9539280Z 
2026-05-16T02:46:34.9540071Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.9541254Z 
2026-05-16T02:46:34.9541674Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.9542369Z     Expected: visible
2026-05-16T02:46:34.9542874Z     Timeout: 15000ms
2026-05-16T02:46:34.9543446Z     Error: element(s) not found
2026-05-16T02:46:34.9543866Z 
2026-05-16T02:46:34.9544103Z     Call log:
2026-05-16T02:46:34.9544857Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.9545887Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.9546474Z 
2026-05-16T02:46:34.9546568Z 
2026-05-16T02:46:34.9546843Z        at fixtures.ts:172
2026-05-16T02:46:34.9547184Z 
2026-05-16T02:46:34.9547433Z       170 |  */
2026-05-16T02:46:34.9548407Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.9549614Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.9550620Z           |                                                                ^
2026-05-16T02:46:34.9551328Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.9551895Z       174 |   });
2026-05-16T02:46:34.9552350Z       175 | }
2026-05-16T02:46:34.9553251Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.9554834Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:38:9)
2026-05-16T02:46:34.9556491Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-collision-boundary.spec.ts:137:5
2026-05-16T02:46:34.9557322Z 
2026-05-16T02:46:34.9558435Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9559949Z     test-results/cli-08-collision-boundary--88271-orth-wall-D-62-anti-revert--chromium/test-failed-1.png
2026-05-16T02:46:34.9561581Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9562302Z 
2026-05-16T02:46:34.9563330Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9564738Z     test-results/cli-08-collision-boundary--88271-orth-wall-D-62-anti-revert--chromium/video.webm
2026-05-16T02:46:34.9566309Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9566945Z 
2026-05-16T02:46:34.9567917Z     Error Context: test-results/cli-08-collision-boundary--88271-orth-wall-D-62-anti-revert--chromium/error-context.md
2026-05-16T02:46:34.9569299Z 
2026-05-16T02:46:34.9570178Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9571514Z     test-results/cli-08-collision-boundary--88271-orth-wall-D-62-anti-revert--chromium/trace.zip
2026-05-16T02:46:34.9572642Z     Usage:
2026-05-16T02:46:34.9572957Z 
2026-05-16T02:46:34.9573942Z         pnpm exec playwright show-trace test-results/cli-08-collision-boundary--88271-orth-wall-D-62-anti-revert--chromium/trace.zip
2026-05-16T02:46:34.9575404Z 
2026-05-16T02:46:34.9576408Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9577082Z 
2026-05-16T02:46:34.9578363Z   15) [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-16T02:46:34.9579325Z 
2026-05-16T02:46:34.9583707Z     Error: [2mexpect([22m[31mlocator[39m[2m).[22mtoBeVisible[2m([22m[2m)[22m failed
2026-05-16T02:46:34.9584476Z 
2026-05-16T02:46:34.9584763Z     Locator: locator('canvas[data-game-ready="true"]')
2026-05-16T02:46:34.9585264Z     Expected: visible
2026-05-16T02:46:34.9585597Z     Timeout: 15000ms
2026-05-16T02:46:34.9585974Z     Error: element(s) not found
2026-05-16T02:46:34.9586234Z 
2026-05-16T02:46:34.9586353Z     Call log:
2026-05-16T02:46:34.9586899Z     [2m  - Expect "toBeVisible" with timeout 15000ms[22m
2026-05-16T02:46:34.9587716Z     [2m  - waiting for locator('canvas[data-game-ready="true"]')[22m
2026-05-16T02:46:34.9588379Z 
2026-05-16T02:46:34.9588390Z 
2026-05-16T02:46:34.9588547Z        at fixtures.ts:172
2026-05-16T02:46:34.9588773Z 
2026-05-16T02:46:34.9588894Z       170 |  */
2026-05-16T02:46:34.9589457Z       171 | export async function waitForGameReady(page: Page): Promise<void> {
2026-05-16T02:46:34.9590353Z     > 172 |   await expect(page.locator('canvas[data-game-ready="true"]')).toBeVisible({
2026-05-16T02:46:34.9591099Z           |                                                                ^
2026-05-16T02:46:34.9591604Z       173 |     timeout: 15_000,
2026-05-16T02:46:34.9591965Z       174 |   });
2026-05-16T02:46:34.9592252Z       175 | }
2026-05-16T02:46:34.9592938Z         at waitForGameReady (/home/runner/work/rebno/rebno/apps/client/test/e2e/fixtures.ts:172:64)
2026-05-16T02:46:34.9594243Z         at loginAndAssertTiles (/home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:24:9)
2026-05-16T02:46:34.9595547Z         at /home/runner/work/rebno/rebno/apps/client/test/e2e/cli-08-floor-collision.e2e.test.ts:119:5
2026-05-16T02:46:34.9596222Z 
2026-05-16T02:46:34.9596946Z     attachment #1: screenshot (image/png) ──────────────────────────────────────────────────────────
2026-05-16T02:46:34.9598576Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/test-failed-1.png
2026-05-16T02:46:34.9599870Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9600371Z 
2026-05-16T02:46:34.9600998Z     attachment #2: video (video/webm) ──────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9602168Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/video.webm
2026-05-16T02:46:34.9603343Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9603846Z 
2026-05-16T02:46:34.9604557Z     Error Context: test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/error-context.md
2026-05-16T02:46:34.9605299Z 
2026-05-16T02:46:34.9605930Z     attachment #4: trace (application/zip) ─────────────────────────────────────────────────────────
2026-05-16T02:46:34.9607046Z     test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-16T02:46:34.9607859Z     Usage:
2026-05-16T02:46:34.9608262Z 
2026-05-16T02:46:34.9609066Z         pnpm exec playwright show-trace test-results/cli-08-floor-collision.e2e-e24e8--render-and-block-east-wall-chromium/trace.zip
2026-05-16T02:46:34.9610041Z 
2026-05-16T02:46:34.9610659Z     ────────────────────────────────────────────────────────────────────────────────────────────────
2026-05-16T02:46:34.9611150Z 
2026-05-16T02:46:34.9611281Z   13 failed
2026-05-16T02:46:34.9612398Z     [chromium] › test/e2e/camera-follow.e2e.test.ts:18:1 › Camera follow: walking toward room edge pans the camera (D-29 mandatory) 
2026-05-16T02:46:34.9614671Z     [chromium] › test/e2e/cli-08-anim.e2e.test.ts:32:1 › CLI-08 anim — local sprite advances ≥3 distinct frames during 1s KeyD hold (Wave 4 GREEN gate) 
2026-05-16T02:46:34.9616563Z     [chromium] › test/e2e/cli-08-camera.e2e.test.ts:29:1 › CLI-08 camera follow — pressing KeyD for 300ms pans camera scrollX (Wave 4 GREEN gate) 
2026-05-16T02:46:34.9619263Z     [chromium] › test/e2e/cli-08-direction-convergence.spec.ts:70:1 › CLI-08 D-58c — dual-tab direction convergence (REQ-SRV-03 server-authoritative) 
2026-05-16T02:46:34.9621507Z     [chromium] › test/e2e/cli-08-dup-login.e2e.test.ts:11:3 › D-51 dup-login eviction › second session evicts first; second tab reaches GameScene, first tab reaches LoginScene 
2026-05-16T02:46:34.9623681Z     [chromium] › test/e2e/cli-08-local-anim.e2e.test.ts:25:1 › local sprite cycles frames during held-key input (D-41 anti-recurrence gate) 
2026-05-16T02:46:34.9625875Z     [chromium] › test/e2e/cli-08-resume-render.spec.ts:30:1 › cli-08-resume-render — CLI-08 resume render — Cookie auto-login: login → reload → GameScene re-renders within 5s + chat works 
2026-05-16T02:46:34.9628235Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:60:1 › CLI-08 D-55d — B joins after A: B sees A in Stand* (no TeleIn anim for pre-existing remote) 
2026-05-16T02:46:34.9630523Z     [chromium] › test/e2e/cli-08-snapshot-no-spawn-anim.spec.ts:138:1 › CLI-08 D-55d — A joined first: A DOES see TeleIn anim when B joins during session (gating preserves new-join semantics) 
2026-05-16T02:46:34.9632467Z     [chromium] › test/e2e/cli-08-tiles.e2e.test.ts:26:1 › CLI-08 tiles — RoomRenderer emits floor tiles + TSide1 sides (Wave 4 GREEN gate) 
2026-05-16T02:46:34.9634126Z     [chromium] › test/e2e/cli-08.e2e.test.ts:22:1 › CLI-08 hard milestone — two clients see each other move + chat round-trip + reconnect grace 
2026-05-16T02:46:34.9635812Z     [chromium] › test/e2e/logout.e2e.test.ts:18:3 › Esc menu › Esc opens menu; Logout returns to LoginScene with cleared session cookies (D-34) 
2026-05-16T02:46:34.9637871Z     [chromium] › test/e2e/sprite-state.e2e.test.ts:16:3 › sprite-state machine (D-35) + nametag (D-27a) › player sprite frame switches to Run<R> on rightward movement, back to Stand on stop 
2026-05-16T02:46:34.9639369Z   2 flaky
2026-05-16T02:46:34.9640440Z     [chromium] › test/e2e/cli-08-collision-boundary.spec.ts:132:3 › derived collision_polys block north wall (D-62 anti-revert) 
2026-05-16T02:46:34.9641922Z     [chromium] › test/e2e/cli-08-floor-collision.e2e.test.ts:114:3 › floor tiles render and block east wall 
2026-05-16T02:46:34.9642717Z   22 passed (12.0m)
2026-05-16T02:46:34.9828854Z /home/runner/work/rebno/rebno/apps/client:
2026-05-16T02:46:34.9830571Z  ERR_PNPM_RECURSIVE_RUN_FIRST_FAIL  @rebno/client@0.1.0 test:e2e: `playwright test`
2026-05-16T02:46:34.9831612Z Exit status 1
2026-05-16T02:46:35.0028671Z ##[error]Process completed with exit code 1.
